<?php

// ------------------------------------------------------------------------
// |@Author       : Jarmin <edshop@qq.com>
// |@----------------------------------------------------------------------
// |@Date         : 2025-04-22 16:06:18
// |@----------------------------------------------------------------------
// |@LastEditTime : 2025-04-21 08:35:09
// |@----------------------------------------------------------------------
// |@LastEditors  : Jarmin <jarmin@ladmin.cn>
// |@----------------------------------------------------------------------
// |@Description  : 状态码扩展类 - 提供全局统一的状态码定义
// |@----------------------------------------------------------------------
// |@FilePath     : StatusExtend.php
// |@----------------------------------------------------------------------
// |@Copyright (c) 2025 http://www.ladmin.cn   All rights reserved.
// ------------------------------------------------------------------------
declare (strict_types=1);

namespace think\admin\extend;

/**
 * 状态码扩展类
 *
 * 功能定位：统一定义系统状态码常量
 *
 * 编码规则：
 * - 2xx：成功状态码
 * - 4xx：客户端错误
 * - 5xx：服务端错误
 * - 1xxx：业务特定错误
 *
 * @package think\admin\extend
 */
class StatusExtend
{
    /**
     * 初始化状态码系统
     *
     * @return void
     */
    public static function init()
    {
        // 定义状态码常量
        self::defineStatusCodes();
    }

    /**
     * 定义状态码常量
     *
     * @return void
     */
    protected static function defineStatusCodes()
    {
        // 1. 成功状态码 (200-299)
        if (!defined('SUCCESS')) {
            define('SUCCESS', 200);               // 操作成功
        }
        if (!defined('CREATED')) {
            define('CREATED', 201);               // 资源创建成功
        }
        if (!defined('ACCEPTED')) {
            define('ACCEPTED', 202);              // 请求已接受
        }
        if (!defined('NO_CONTENT')) {
            define('NO_CONTENT', 204);            // 无返回内容
        }

        // 2. 客户端错误 (400-499)
        // 2.1 请求参数相关
        if (!defined('BAD_REQUEST')) {
            define('BAD_REQUEST', 400);           // 错误的请求
        }
        if (!defined('PARAM_INVALID')) {
            define('PARAM_INVALID', 400);         // 参数无效
        }
        if (!defined('PARAM_MISSING')) {
            define('PARAM_MISSING', 400);         // 参数缺失
        }
        if (!defined('PARAM_TYPE_ERROR')) {
            define('PARAM_TYPE_ERROR', 400);      // 参数类型错误
        }

        // 2.2 授权相关
        if (!defined('UNAUTHORIZED')) {
            define('UNAUTHORIZED', 401);          // 未授权
        }
        if (!defined('FORBIDDEN')) {
            define('FORBIDDEN', 403);             // 禁止访问
        }
        if (!defined('NO_PERMISSION')) {
            define('NO_PERMISSION', 403);         // 无权限
        }

        // 2.3 资源相关
        if (!defined('NOT_FOUND')) {
            define('NOT_FOUND', 404);             // 资源不存在
        }
        if (!defined('METHOD_NOT_ALLOWED')) {
            define('METHOD_NOT_ALLOWED', 405);    // 请求方法不允许
        }
        if (!defined('CONFLICT')) {
            define('CONFLICT', 409);              // 资源冲突
        }
        if (!defined('GONE')) {
            define('GONE', 410);                  // 资源不可用
        }

        // 2.4 验证相关
        if (!defined('VALIDATION_FAILED')) {
            define('VALIDATION_FAILED', 422);     // 验证失败
        }
        if (!defined('LOCKED')) {
            define('LOCKED', 423);                // 资源被锁定
        }
        if (!defined('TOO_MANY_REQUESTS')) {
            define('TOO_MANY_REQUESTS', 429);     // 请求过于频繁
        }

        // 3. 服务端错误 (500-599)
        if (!defined('SERVER_ERROR')) {
            define('SERVER_ERROR', 500);          // 服务器内部错误
        }
        if (!defined('NOT_IMPLEMENTED')) {
            define('NOT_IMPLEMENTED', 501);       // 功能未实现
        }
        if (!defined('SERVICE_UNAVAILABLE')) {
            define('SERVICE_UNAVAILABLE', 503);   // 服务不可用
        }
        if (!defined('GATEWAY_TIMEOUT')) {
            define('GATEWAY_TIMEOUT', 504);       // 网关超时
        }

        // 4. 业务特定错误 (1000-1999)
        // 4.1 用户与认证错误 (1000-1099)
        if (!defined('LOGIN_EXPIRED')) {
            define('LOGIN_EXPIRED', 1000);        // 登录过期
        }
        if (!defined('LOGIN_FAILED')) {
            define('LOGIN_FAILED', 1001);         // 登录失败
        }
        if (!defined('ACCOUNT_LOCKED')) {
            define('ACCOUNT_LOCKED', 1002);       // 账户已锁定
        }
        if (!defined('ACCOUNT_DISABLED')) {
            define('ACCOUNT_DISABLED', 1003);     // 账户已禁用
        }
        if (!defined('PASSWORD_EXPIRED')) {
            define('PASSWORD_EXPIRED', 1004);     // 密码已过期
        }
        if (!defined('INVALID_CREDENTIAL')) {
            define('INVALID_CREDENTIAL', 1005);   // 凭证无效
        }
        if (!defined('SIGN_INVALID')) {
            define('SIGN_INVALID', 1006);         // 签名无效
        }
        if (!defined('TOKEN_EXPIRED')) {
            define('TOKEN_EXPIRED', 1007);        // 令牌过期
        }
        if (!defined('TOKEN_INVALID')) {
            define('TOKEN_INVALID', 1008);        // 令牌无效
        }
        if (!defined('CAPTCHA_ERROR')) {
            define('CAPTCHA_ERROR', 1009);        // 验证码错误
        }

        // 4.2 资源与权限错误 (1100-1199)
        if (!defined('RESOURCE_EXISTS')) {
            define('RESOURCE_EXISTS', 1100);      // 资源已存在
        }
        if (!defined('RESOURCE_NOT_EXISTS')) {
            define('RESOURCE_NOT_EXISTS', 1101);  // 资源不存在
        }
        if (!defined('RESOURCE_LOCKED')) {
            define('RESOURCE_LOCKED', 1102);      // 资源已锁定
        }
        if (!defined('RESOURCE_OPERATION_FAILED')) {
            define('RESOURCE_OPERATION_FAILED', 1103); // 资源操作失败
        }
        if (!defined('PERMISSION_DENIED')) {
            define('PERMISSION_DENIED', 1104);    // 权限不足
        }

        //4.3 系统错误 (1200-1299)
        if (!defined('CLASS_NOT_EXISTS')) {
            define('CLASS_NOT_EXISTS', 1200);     // 类不存在
        }
        if (!defined('METHOD_NOT_EXISTS')) {
            define('METHOD_NOT_EXISTS', 1201);    // 方法不存在
        }
        if (!defined('SCENE_NOT_EXISTS')) {
            define('SCENE_NOT_EXISTS', 1202);     // 场景不存在
        }
        if (!defined('FILE_NOT_EXISTS')) {
            define('FILE_NOT_EXISTS', 1203);      // 文件不存在
        }
        if (!defined('DIR_NOT_EXISTS')) {
            define('DIR_NOT_EXISTS', 1204);       // 目录不存在
        }
        if (!defined('SERVICE_NOT_FOUND')) {
            define('SERVICE_NOT_FOUND', 1205);    // 服务未找到
        }
        if (!defined('CONFIG_ERROR')) {
            define('CONFIG_ERROR', 1206);         // 配置错误
        }

        // 4.4 第三方服务错误 (1300-1399)
        if (!defined('API_CALL_FAILED')) {
            define('API_CALL_FAILED', 1300);      // API调用失败
        }
        if (!defined('SMS_SEND_FAILED')) {
            define('SMS_SEND_FAILED', 1301);      // 短信发送失败
        }
        if (!defined('EMAIL_SEND_FAILED')) {
            define('EMAIL_SEND_FAILED', 1302);    // 邮件发送失败
        }
        if (!defined('PAYMENT_FAILED')) {
            define('PAYMENT_FAILED', 1303);       // 支付失败
        }
        if (!defined('REMOTE_SERVICE_ERROR')) {
            define('REMOTE_SERVICE_ERROR', 1304); // 远程服务错误
        }

        // 4.5 数据操作错误 (1400-1499)
        if (!defined('DB_ERROR')) {
            define('DB_ERROR', 1400);             // 数据库错误
        }
        if (!defined('DATA_EXISTS')) {
            define('DATA_EXISTS', 1401);          // 数据已存在
        }
        if (!defined('DATA_NOT_EXISTS')) {
            define('DATA_NOT_EXISTS', 1402);      // 数据不存在
        }
        if (!defined('DATA_OPERATION_FAILED')) {
            define('DATA_OPERATION_FAILED', 1403);// 数据操作失败
        }
        if (!defined('TRANSACTION_FAILED')) {
            define('TRANSACTION_FAILED', 1404);   // 事务失败
        }

        // 4.6 业务逻辑错误 (1500-1599)
        if (!defined('BUSINESS_ERROR')) {
            define('BUSINESS_ERROR', 1500);       // 业务错误
        }
        if (!defined('OPERATION_FAILED')) {
            define('OPERATION_FAILED', 1501);     // 操作失败
        }
        if (!defined('STATUS_ERROR')) {
            define('STATUS_ERROR', 1502);         // 状态错误
        }
        if (!defined('FLOW_ERROR')) {
            define('FLOW_ERROR', 1503);           // 流程错误
        }

        // 4.7 二维码相关错误 (2000-2099)
        if (!defined('QRCODE_EXPIRED')) {
            define('QRCODE_EXPIRED', 2001);    // 二维码已过期
        }
        if (!defined('QRCODE_INVALID')) {
            define('QRCODE_INVALID', 2002);    // 二维码无效
        }
        if (!defined('QRCODE_USED')) {
            define('QRCODE_USED', 2003);       // 二维码已被使用
        }
        if (!defined('QRCODE_WAITING')) {
            define('QRCODE_WAITING', 2004);    // 等待扫描
        }
        if (!defined('QRCODE_SCANNED')) {
            define('QRCODE_SCANNED', 2005);    // 已扫描
        }
        if (!defined('QRCODE_CONFIRMED')) {
            define('QRCODE_CONFIRMED', 2006);  // 已确认
        }
        if (!defined('QRCODE_CANCELLED')) {
            define('QRCODE_CANCELLED', 2007);  // 已取消
        }

        // 兼容原有常量
        if (!defined('SESSION_TIMEOUT')) {
            define('SESSION_TIMEOUT', LOGIN_EXPIRED); // 会话超时（兼容性常量）
        }

        if (!defined('ERROR')) {
            define('ERROR', OPERATION_FAILED); // 操作失败（兼容性常量）
        }
    }
}
